Z80 EDAS for PC−8001 Ver.1.2 ――――――――――――――――――――――――――――――――――――――― PC活用研究月号掲載 PC−8001 32K マシン語 0C900H−0E80FH コールド・スタート 0C900H ホット・スタート  0C970H 起動方法 MON L GC900 ――――――――――――――――――――――――――――――――――――――― ・―――――――――――――――――――――――・ |EDAS(エディタ・アセンブラ)は、     | |このPC用をはじめMZ−1200、80K/C、| |80B/2000などの機種に         | |広くインプリメントされています。       | |PC−8001用は              | |システム・プログラム・ライブラリ(2)にも   | |紹介されていますが、             | |今回のものはかなり機能アップし、       | |原型のMZB用と同機能になっています。    | |EDASのプログラムに興味のある方は、    | |主要部分はほとんど変わっていないので     | |アセンブル・リストの載っている        | |同誌を参照してください。           | |PCはMZ系に比べて空きメモリが少ないので、 | |EDASをROM化したほうが         | |大きなプログラムの開発に有利です。      | |マシン語ダンプ・リストはRAM版です。    | ・―――――――――――――――――――――――・ ――――――――――――――――――― 1.概要 ――――――――――――――――――― 本プログラムは、ザイログ形式のニモニックで記述された ソース・プログラムを編集、アセンブルするものです。 編集コマンドでメモリ上にソース・プログラムを形成し アセンブル・コマンドでそれをアセンブルするので、 内部処理は2パスですが実際の操作は1パスで行なえます。 メモリに余裕があればソース・プログラム、 オブジェクト・プログラムをオンメモリでデバックでき、 誤りがあった場合 ソース・プログラムの修正・再アセンブルが直ちに行なえます。 ソース・プログラムをメモリに持つということは、 アセンブルできるプログラムの規模が メモリ容量によって制限されるおそれがあるということです。 しかし、EDASをROM化すれば 26Kバイトほどの空メモリがあるので、 2,200ステートメント程度の ソース・プログラムまでアセンブルできます。 EDASの主な機能は以下のとおりです。  (1)キーボード入力によってソース・プログラムを作成  (2)ソース・プログラム、テープの作成・読み込み  (3)ストリング・サーチによる特定ステートメントの訂正  (4)ステートメント単位の移送  (5)ソース・プログラム・リスト、アセンブル・リスト、    ラベル・テーブル・リストの作成  (6)オブジェクト・プログラム・テープの作成・読み込み  (7)アセンブル時、オブジェクト・コードを直接メモリに格納  (8)Z80全レジスタの値を表示するブレーク機能 ――――――――――――――――――― 2.アセンブリ言語 ――――――――――――――――――― (1)使用できる文字 ASCIIコード20H〜F7Hまでの 216種類の文字を使います。 コメント欄ではこのすべでの文字が使えます。  (1)ニモニック、レジスタ名、コンディション    ASCIIコード41H〜5AHの英文字(A〜Z)を使います。  (2)数字    a)2進数字:0,1    b)10進数字:0,1,2,……,9    c)16進数字:0,1,2,……,9,A,……,F  (3)ラベル    ASCIIコード3FH〜F7Hの文字で    始まらなくてはいけませんが、    2文字め以降はASCIIコード    30H〜39Hの数字(0〜9)を含んでもかまいません。    1ステートメントの範囲内(79文字以内)であれば    文字数に制限はありません。  (4)演算子    +(加算)、−(減算)、*(乗算)、/(除算)、    %(余りを得る除算)、!(OR)、&(AND)が使えます。 (2)定数 定数とはそれ自身で定まる値を持つもので、数字列や文字列で表現されます。 このうち数字定数は数字だけ、文字定数は数字を含む文字で構成します。  (1)2進定数    2進定数は2進数文字で構成し、末尾に“B”を付け加えます。    例:101101B(=45)  (2)10進定数    10進定数は10進数文字で構成します。  (3)16進定数    16進定数は16進数文字で構成し、末尾に“H”を付け加えます。    ただしA〜Fの文字で始まる16進数は、ラベルと    区別するために先頭に“0”を付け加えねばなりません。     例:12A4H,0F57H  (4)文字定数    文字定数は引用符(’)で囲まれた文字列で構成し、    この文字列コードを値として持ちます。    引用符そのものをの文字定数とするときは、    引用符を2個続けて記述します。     例: ’ABC’,’イロハ’ (3)ステートメントの記述法 1ステートメントは1行79文字に収まるように書いてください。 ステートメントはラベル・コード・オペランド・コメントの 各欄に分かれていますが、固定されたフォーマットはありません。 各欄はどのケタから始めてもかまいません。 何も書かれていないヌル・ステートメント、ラベルだけの ステートメント、コメントだけのステートメントなども許されます。 セミコロン(;)はコメントの初まりを表わします。  (1)ラベル欄    ラベルとは、命令で参照するために各ステートメントに    つける名前のことで、必要により記述します。    ラベルの直後にはコロン(:)を付加します。    ただし、EQUステートメント(擬似命令の項参照)で    使うラベルの後にはコロンではなく    スペースを入れなければなりません。    また、命令・擬似命令・レジスタ名などの予約語は    ラベルとして使うことができません。  (2)コード欄    この欄には、実行すべきニモニックや擬似命令(後述)を記述します。    ニモニックはザイログ仕様です。  (3)オペランド欄    コード欄に書いたニモニックに対応するオペランドを記述します。    複数のオペランドはカンマ(,)で区切ります。    オペランド欄を記述する際には、注意すべきことが2つあります。   1)表現式     表現式とは、式の形式をとるオペランドです。     数値定数、文字定数、ラベル、カレント・プログラム・カウンタ     (命令の割り付けられたアドレスを値とするもので、     “S”で表わす)などを演算子で結合して表現式を構成します。     演算は常に左から右へ実行され、     演算子による優先順位の差や( )での優先順位の変更は     できません。     また、表現式中の文字定数は後から2文字だけか     演算対象となります。     ・―――――――――――――――――――――――――・     |例 TDAT EQU 54            |     |  BIT TDAT&7,A ;=BIT 6,A |     |  RST TDAT&38H ;=RST 30H |     ・―――――――――――――――――――――――――・   2)相対ジャンプ命令     相対ジャンプ命令(JR、DJNZ)のジャンプ先を示す     オペランドが以下の形式である限り、     EDASが自動的に補正を行ないます。     ・―――――――――――――――――――――――――・     |JR ラベル名(演)数値定数           |     |JR $(演)数値定数      (演)は演算子 |     ・―――――――――――――――――――――――――・     すなわち、ラベル名や     $(カレント・プログラム。カウンタ)を2つ以上含んだり、     文字定数を含んだりする表現式であれば     演算結果をそのままオペランド値とし、     自動的な補正をしません。 (4)擬似命令 擬似命令はザイログのニモニックには含まれていない命令ですから、 アセンブルすることによってZ80のマシン語を生成することはできません。 しかしEDASはこの擬似命令を見て それぞれの命令に対応した動作を行ないます。 すなわち擬似命令は、アセンブラに対する制御命令なのです。 EDASは8種類の擬似命令を持っています。  (1)ORG(ORIGIN)    オペランドの値をアセンブル開始アドレスとして設定します。    オペランドの表現式にラベルが含まれている場合は、    そのラベルはすでに定義されていなくてはなりません。    本命令を省略すれば0番地をアセンブル開始アドレスとします。  (2)EQU(EQUATE)    オペランドの値をラベルの値として定義します。    オペランドの表現式にラベルが含まれている場合は、    そのラベルはすでに定義されていなくてはなりません。  (3)DEFW(DEFINE WORD)    オペランド値を16ビット・データとして、    下位8ビット、上位8ビットの順にメモリに割り付けます。    カンマで区切って複数のオペランドを記述できます。  (4)DEFB(DEFINE BYTE)    オペランドを8ビット・データとしてメモリに割り付けます。    カンマで区切って複数のオペランドを記述できます。  (5)DEFS(DEFINE STORAGE)    オペランドで指定されたバイト数のメモリを確保します。    オペランドの表現式にラベルが含まれている場合は、    そのラベルはすでに定義されていなくてはなりません。  (6)DEFM(DEFINE MEMORY)    オペランドに記述された文字定数をメモリに割り付けます。    オペランドに文字定数以外は記述できません。  例 DEFM ’ABCD’          ;41424344    DEFB ’A’,’B’,’C’,’D’ ;   〃    DEFW ’BA’,’DC’       ;   〃    上記の3つのステートメントはすべて同一のコードをメモリに割り付ける。  (7)SKIP    アセンブル・リスト出力のとき、    この命令で改ページを行なって見出しを表示します。    オペランドの記述内容は無視されますが、    未定義ラベルを含んでいればラベル・エラーとなり、    カンマで区切って3つ以上のオペランドを記述すれば    Syntax Errとなります。    文字定数の形でコメントを記述してください。  (8)END    一般のアセンブラではアセンブル終了を指示する命令ですが、    EDASでは意味をもちません。    なぜならEDASでは指定ステートメントだけを    アセンブルするからです。    オペランドの記述内容については    SKIP命令の項を参照してください。 ――――――――――――――――――― 3.操作法 ――――――――――――――――――― EDASプログラムの操作法について述べます。 (1)起動 EDAS(RAM)版のコールド・スタート・アドレスは、 C900H番地です(ROM版は6000H番地)。 モニタのGコマンドで起動させると、 画面をクリアして下記のメッセージを出力します。 ・―――――――――――――――・ |Z-80 EDAS For PC-8001 Ver 1.2 | |Buffer Area- | | | ・―――――――――――――――・ ここで、ソース・プログラム、ラベル・テーブル、 オブジェクト・コードなどを格納するための バッフア・エリアを指定します。 バッフア・エリアの開始アドレス,終了アドレスの順に コンマで区切って、4桁の16進数で入力します。 16進数以外の文字を入力すると再び “Buffer Area−”のメッセージを出力します。 また、入力した16進数は下位4桁が有効です。 ここで指定したバッファ・エリアの範囲外に、 ソース・プログラム、ラベル・テーブルが格納されることはありません (オブジェクト・コードに関してはASコマンドの項を参照)。 バッファ・エリア指定可能範囲はメモリ・マップを参照してください。 EDASのホット・スタート・アドレスは、 RAM版がC970H番地、ROM版が6070H番地です。 なお、ホット・スタートは[f・10]でも可能です。 メモリ・マップ   6000・―――――――――・     |  EDAS   |     |  (ROM版) |   8000|―――――――――| \ \     |         | | | バッファ指定可能範囲     |         | | |     |         |R|R|     |         |A|O|     |         |M|M|(注)8000〜8022番地は     |         |版|版|   PCのリセット時、     |         | | |   イニシャライされるので、     |         | | |   この範囲をバッファ・エリアとして     |         | | |   使うときはリセットしないこと。   C900|―――――――――| / |     |         |   |     |  EDAS   |   |     |  (RAM版) |   |     |         |   |   E880|―――――――――|   /     |BASIC,MON|     |スタック・エリア |   E8D1|―――――――――|\     |EDAS     ||     |スタック・エリア ||   E930|―――――――――||ROM版/RAM版共通     |EDAS     ||     |ワーク・エリア  ||   EA00|―――――――――|/     |PC−8001  |     |ワーク・エリア  | ※CMT入出力バッファにRS−232C     |スクリーン・エリア| チャンネル・バッファ     |         | (EDCE〜EECD)を使っている。   FFFF・―――――――――・ (2)コマンド EDASのコマンドは全部で21種あり、 コマンド待ちのとき“>”が表示されます。 パラメータのあるコマンドを入力すると、 コマンド名につづいて“:”が表示されて パラメータの入力待ちになります。 コマンドおよびパラメータの入力途中で [STOP]キーを入力すれば、コマンド待ちになります。 また、コマンド・エラー、パラメータ・エラーの場合は “?”を表示してコマンド待ちに戻ります。 コマンドは[RETURN]キー入力で実行を開始します。 (3)EDAS制御コマンド 表1を参照してください。 ここではモード設定コマンド(M)について説明します。 このコマンドではEDASの実行モードを設定します。 以下のメッセージを見て、[Y]または[N]を入力し、 モードを設定してください。 [RETURN]キーだけを入力すれば、 モードを変更せずに次にスキップします。 それ以外の入力ならパラメータ・エラーとなり コマンド待ちに戻ります。 なお、コールド・スタート時には、 すべてのモードは“Y”になっています。 ・―――――――――――――――――・ |Printer Output?  | ・―――――――――――――――――・ このメッセージに[Y]を入力すると、 ソース・リスト(Lコマンド)、 アセンブル・リスト(ALコマンド)、 ラベルテーブル・リスト(ATコマンド)、 オブジェクト・リスト(AWコマンド)を プリンタにも出力します。 ・―――――――――――――――――・ |Syntax Check?    | ・―――――――――――――――――・ キーボードまたはカセットテープから ソース・ステートメントを入力するときに、 文法チェックを行なうかどうかを設定します。 文法チェック・モードを設定しておくと、 1ステートメント入力されるごとに文法チェックを行ない、 誤りがあると“SyntaxErr”のメッセージを出力します。 キー入力時ならば、入力したステートメントが再表示されて訂正できます。 カセットテープからの入力時ならコマンド待ちに戻ります。 このモードが[N]なら、文法チェックは行ないません。、 ・―――――――――――――――――――――――――・ |Statment Number Display? | ・―――――――――――――――――――――――――・ このモードに[Y]を設定すると、 Lコマンドで出力されるソース・プログラム・リストに ステートメント番号を付け加えます。 ・―――――――――――――――――――・ |CMT Control,Pulse? | ・―――――――――――――――――――・ テープ・レコーダをリモート制御する方法を指定するモードです。 駆動モータを直接ON/OFFする 一般のテープレコーダを使う場合は[N]を、 パルス信号によってPAUSE/PAUSE解除を行なう データレコーダを使う場合は[Y]を入力します。 また、画面の表示文字数を設定するコマンドはありません。 BASICのダイレクト・コマンド(WIDTH) で設定してください。 表1 EDAS制御コマンド ・――――――――――――――――――――――・ |  コマンド  |    機   能    | |[CTRL]+[N]| モニタ起勣       | |[CTRL]+[B]| N−BASIC起動   | |   M    | モード設定(本文参照) | ・――――――――――――――――――――――・ (4)編集コマンド ソース・ステートメントを編集するためのコマンドは9種類あり、 いずれもコマンド・パラメータの指定ができます。 パラメータP1、P2、P3はステートメント番号をあらわす10進数か、 または“.”や“/”などのポインタです。 “.”や“/”はEDASのもつポインタで、 “.”は前回のコマンドで最後に処理したステートメント番号+1、 “/”は入力済み最終ステートメント番号をそれぞれ表わします。 また、各ポインタ±10進数の指定もできます。 パラメータの数はコマンドにより異なりますが、 余分なパラメータは無視されます。 また、4つ以上のパラメータ入力や、 不合理なパラメータ値などはパラメータ・エラーとなります。 編集コマンドの一覧表を表2に示します。 このうち〔 〕で囲まれたパラメータは省略できます。 Iコマンド、Cコマンドなどで キーボードからステートメントを入力するときは、 次の編集キーが使えます。 表2a EDAS編集コマンド ・――――――――――――――――――――――――――・ |[→]    |カーソルを右に進める。ただし最終文字 | |    |以後には進まない。          | |[←]    |カーソルを左に進める。ただし第一文字 | |      |以前には進まない。          | |[INS]  |カーソル位置より右の文字を順操りに右 | |      |に進め、カーソル位置にスペースを入力 | |      |する。                | |[DEL]  |カーソル位置より1つ左の文字を削除し | |      |カーソルより右の文字を順楳りに左に進 | |      |める。                | |[CTRL]+[I]|カーソル位置より8の倍数桁となるまで | |      |スペースを入力する。         | |[CTRL]+[E]|カーソル位置より右の文字をすべて削除 | |      |し、1ステートメントの入力を終了する。| |[RETURN]  |1ステートノントの入力を終了する。  | ・――――――――――――――――――――――――――・ 表2b 編集コマンド ・―――――――――――――――――――――――――――――――――――――・ | コマンド | 機  能 |       解       説       | |――――――+――――――+―――――――――――――――――――――――| |I:[P1]  |キーボード入力 |指定した位置に、キーボードから入力されたステートメントを| | | |順次挿入します。P1を省略すれば、 | | | |1または最終ステートメントの次から入力されます。 | | | |[STOP]キーか、バッファがいっぱいになって | | | |"Buffer full"のメッセージが出力された場合には | | | |コマンドを終了します。 | |――――――+――――――+―――――――――――――――――――――――| |C:[P1] |訂正 |P1で指定したステートメントが表示されるので、 | | | |編集キーにより訂正します。 | | | |[RETURN]または[CTRL]+[E]で訂正は | | | |有効となります。 | | | |P1を省略すれば第1ステートメントから | | | |訂正可能となります。[STOP]キー、 | | | |最終ステートメントの訂正柊了、"Buffer full"などの | | | |場合にはコマンドを終了します。 | |――――――+――――――+―――――――――――――――――――――――| |L:[P1[,P2]] |ソース・プログラム・|P1ステートメントまたはP1〜P2ステートメントをリスト出力します。 | |      |  リスト出力|P1,P2ともに省略すれば全ステートメントを出力します。 | |      |      |[ESC]キー入力で出力は一時停止します。 | |      |      |[STOP]キーでコマンドの実行を途中終了します。 | |――――――+――――――+―――――――――――――――――――――――| |S:[P1[,P2]] |サーチによる |P1〜P2ステートメントの範囲で、指定された文字列を含む | |      | 訂正|ステートメントをサーチし、1ステートメントごとに表示します。 | |      |      |表示された文字列は、 | |      |      |Cコマンドと同様に訂正できます。 | |      |      |P1だけ指定すればP1ステートメントを、 | |      |      |P1,P2ともに省略すれば全ステートメントを対象とします。| |      |      |指定できる文字列は15文字以内で、 | |      |      |スペースを含むすぺての文字と | |      |      |特殊文字(TAB)が指定できます。 | |      |      |コマンドの途中終了は[STOP]キーです。 | ・―――――――――――――――――――――――――――――――――――――・ 表2 編集コマンド ・―――――――――――――――――――――――――――――――――――――・ | コマンド | 機   能 |       解       説      | |――――――+―――――――+――――――――――――――――――――――| |D:[P1[,P2]] |消 除 |P1ステートメントまたはP1〜P2ステートメントを削除します。 | | | |P1,P2ともに省略すれば全ステートメントを削除します。| | | |コマンドの途中終了は[STOP]キーです。 | |R:[P1] |ソース・プログラム |指定した位置に、カセットテープから読み込んだ | | |・テープ読み込み |ステートメントを順次挿入します。 | | | |同時に面面にリスト出力します。 | | | |このとき[ESC]キーで読み込みを一時停止します。 | | | |P1を省略すれば、 | | | |1または最終ステートメントの次から入力されます。 | | | |[STOP]キー、読み込み終了、"Buffer full"、 | | | |カセットテープのリード・エラー、Syntax Err検出の | | | |各場合においてコマンドの実行を終了します。 | |W:[P1[,P2]] |ソース・プログラム |P1ステートメントまたはP1〜P2ステートメントを | | | ・テープ出力|カセットテープに出力します。 | | | |P1P2ともに省略すれば、全ステートメントを出力します。| | | |コマンドの途中終了は[STOP]キーです。 | |V:[P1] |テープ・ベリファイ |P1ステートメント以後とソース・プログラム・・テープとの | | | |ベリファイを行ないます。 | | | |P1を省略すれば第1ステートメントからベリファイします。 | | | |[STOP]キー、カセットテープのリード・エラー、ベリファイ終了時に| | | |コマンドを終了します。 | |T:P1,P2,P3 |転送 |P1〜P2ステートメントをP3ステートメントの直前に転送します。| | | |パラメータ、(P1≦P2)かつ((P2|1)<P3)、または | | | |(P1≦P2)かつ((P1-1)>P3)の条件を | | | |満足しなければパラメータ・エラーとなリます。 | | | |なお、P3には最終ステートメント+1も指定できます。 | | | |転送終了時にコマンドを終了します。 | ・―――――――――――――――――――――――――――――――――――――・ (5)アセンブル・コマンド ステートメントのアセンブルを行なうコマンドは4種類あり、 どれもパラメータの指定ができます。 パラメータの指定方法は編集コマンドと同じです。 また、それぞれP1だけを指定すればP1ステートメントを、 P1、P2ともに省略すれば全ステートメントをアセンブルします。 アセンブル対象ステートメントの 範囲外のラベルを参照するステートメントがあると、 未定義ラベル・エラーとなります。 コマンドを入力すると“EXC/Label Table GN″のメッセージを出力します。 これは、ラベル・テーブルの作成を開始したことを表わしています。 このとき、ラベルに値を正しく割り付けられないような ステートメントがあると、 コマンドの実行を中止して“Err in XXXX”のメッセージを出力します。 XXXXは誤りのあったステートメント番号です。 ここで発見される誤りはラベル・テーブルの割り付けができないことですから、 ニモニック・エラーや、ORG、EQU、DEFSステートメントの オペランドに含まれた未定義ラベルなどが原因になります。 これらのうち、ニモニック・エラーはステートメントを入力するときに Syntax Checkモードを指定すれば防げます。 二重定義ラベルのチェックはATコマンドの実行時に行ないます。 AT以外のコマンド実行時に二重定義ラベルを発見した場合は、 ステートメント番号の小さいほうのラベル値を参照して アセンブルを行ないます。 ラベル・テーブルの作成を終了後、 各コマンドごとに表3に示す処理を実行します。 ALコマントで出力するエラーコードは3種類あり、 それらの意味は次のとおりです。 ・――――――――――――――――――――――――・ |L:未定義ラベルの参照。 ただしORG、EQU、DEFS | |  ステートメントの場合を除く。        | |R:相対ジャンプの範囲を超えている。      | |  またはオペランドの値が8ビットを超えている。| |V:IM、RST、BIT、RES、SET命令のオペランド値が | |  命令の要求する値でない。          | ・――――――――――――――――――――――――・  表3 アセンブル・コマンド ・―――――――――――――――――――――――――――――――――――――・ | コマンド | 機   能 |       解       説      | |――――――+―――――――+――――――――――――――――――――――| |AL:[P1[,P2]]|アセンブル・リスト出力|P1〜P2ステートメントのアセンブルを行ない、 | | | |アセンブル・リストを出力します。 | | | |リストには下記のものが出力されます。 | | | |PAGE XXXX:リストのページ数 | | | |E :エラーコード(意味は本文参照) | | | |STNR :ステートメント番号 | | | |ADRS :命令のアドレス、EQUステートメントのオペランド値| | | |OBJECT :オブジェクト・コード | | | |SOURCE STATMENTS:ソース・プログラム | | | |アセンブルを終了すると、 | | | |"ERRORS XXXX"のメッセージによりエラー数を | | | |出力します。 | | | |[ESC]キーでリスト出力は一時停止します。 | |――――――+―――――――+――――――――――――――――――――――| |AS:[P1[,P2]]|オブジェクト・コード |P1〜P2ステートメントのアセンブルを行ない、 | | | 格納|オブジェクト・コードを直接メモリに格納します。 | | | |まずオブジェクト・コードをバッファ・エリアに格納します。 | | | |このときバッファ・エリアがいっぱいになるか、 | | | |格納アドレスが後退するORG命令があると | | | |"Buffer full"のメッセージを出力し、 | | | |コマンドの実行を中止します。 | | | |次に"ERRORS XXXX"のメッセージの出力と | | | |"Relocaton Bias"の表示が行なわれます。 | | | |16進数(下位4桁が有効)でバイアス値を入力すると、| | | |ソース・プログラムのORG命令の値+バイアス値のアドレスに | | | |バッファ内のオブジェクト・コードをブロック転送します。 | | | |[RETURN]キーだけを入力すれば | | | |バイアス値は0となります。 | | | |転送が終了するとモニタに制御が移ります。 | |――――――+―――――――+――――――――――――――――――――――| |AT:[P1[,P2]]|ラベル・テーブル出力|二重定義ラベルのチェックを行ない、 | | | |ラベルテーブル・リストを出力します。 | | | |チェック中は"EXC/Mult Label CK"のメッセージが出ます。| | | |二重定義ラベルがあると下記の形式で表示します。| | | | 5 - | | | | 10 |- 同一ラベルのあったステートメント番号 | | | | 247 - | | | |ラベルテーブル・リストは、 | | | |ラベル文字の上昇順に6文字まで出力します。 | | | |[ESC]キーでリスト出力は一時停止します。 | |――――――+―――――――+――――――――――――――――――――――| |AW:[P1[,P2]]|オブジェクト・テープ |P1〜P2ステートメントをアセンブルし、オブジェクト・コードを | | | 作成|カセットテープに出力してオブジェクト・テープを作成します。| | | |このオブジェクト・テープはOコマンドでロードできます。 | | | |同時にテープヘの出力内容が | | | |下記の形式で表示されます。 | | | |:0A 9000 00 30 31 32 33 34 35 36 37 38 39 XX| | | || | | | ----------------------------- --| | | || | | | オブジェクト・コード | | | | || | | | チェック・サム| | | || | | ・-未使用コード(常に00) | | | || | ・------格納アドレス(例では9000H番地) | | | || ・---------1レコードのデータ数(例では0AH=10バイト)| | | |・-----------レコード・マーク(テープへだけ出力) | |――――――+―――――――+――――――――――――――――――――――| | | |[ESC]キーで出力を一時停止します。 | | | |アセンブルが終了すると、"ERRORS XXXX"の | | | |メッセージによリエラー数を出力します。 | ・―――――――――――――――――――――――――――――――――――――・ (6)オブジェクト・プログラム・ロード・コマンド AWコマンドで作成したオブジェクト・テープを読み込みます。 書式は表4を参照してください。 この中で、ロード・バイアスとは オブジェクト・テープのもつ格納アドレスに加算して 実際の格納アドレスを指定するものです。 たとえば0H〜3FFFHで実行させるブログラムは 直接ロードできないので、ロード・バイアスを4000Hに指定して 4000H番地以降にロード後、 ブロック転送を行なえばよいことになります。 (7)ブレーク・ポインタ関連コマンド ブレークは、あらかじめ設定したブレーク・ポイント・アドレスに、 一定の処理をするように制り当てたRST(リスタート)命令を書き込み、 プログラムを実行させて RST命令に突き当たったときの状態をみながら Debugするためのものです。 どのRST命令を使うかの指定は BIコマンドで行ないますが(表4参照)、 各RST命令の処理は以下のとおりです。 ・―――――――――――――――――――――――――・ |RST 00   BASICのコールド・スタート    | |RST 08〜18 N−BASIC ROMの処理に依存。 | |RST 20〜38 Z80 CPUの令レジスタ値を表示後、 | |          EDASのコマンド待ちとなる。| ・―――――――――――――――――――――――――・ Debugするプログラムの起動は、 モニタのGコマンドで行なってください。 表4 オブジェクト、ブレーク・ポインタコマンド ・―――――――――――――――――――――――――――――――――――――・ | コマンド | 機   能 |       解       説      | |――――――+―――――――+――――――――――――――――――――――| |O:[Pa] |オブジェクト・テープ |Paはロード・バイアスを表わし(本文参照)、 | | | ・ロード|16進数で下位4桁が有効です。 | | | |paを省略すればロード・バイアスは0となります。 | | | |[STOP]キーで実行を中止すると | | | |"MT Read Err"のメッセージを出力します。 | |――――――+―――――――+――――――――――――――――――――――| |BI:[Pi] |ブレーク命令指定 |どのRST命令を使うかを指定します。 | | | |PiはRST命令のエントリ・アドレス(00,08など)で、 | | | |16進数の下位2桁が有効です。 | | | |Piを省略すれば0と解釈します。 | | | |EDASのコールドスタート時には | | | |RST38Hが設定してあります。 | |――――――+―――――――+――――――――――――――――――――――| |BS:Pa |ブレーク・アドレス |ブレーク・ポイント・アドレスを指定します。 | | | 指定|Paは16進数で、下位4桁が有効です。 | | | |最大10箇所まで指定できますが、 | | | |0番地の指定はパラメータ・エラーです。 | |――――――+―――――――+――――――――――――――――――――――| |BR:Pa |ブレーク・アドレス |設定ずみのブレーク・ポイント・アドレスを取り消します。 | | | 取り消し|Paは16進数で、下位4桁が有効です。 | | | |未設定アドレスの取り消しを推定すると | | | |パラメータ・エラーになります。 | |――――――+―――――――+――――――――――――――――――――――| |BD |ブレーク・ポイント |設定ずみブレーク・ポイント・アドレスを | |      |  ・アドレス表示|すべて表示します。 | ・―――――――――――――――――――――――――――――――――――――・ ――――――――――――――――――― 4.あとかき ――――――――――――――――――― ステートメントにスペースが8の倍数桁まで連続しているときは、 [CTRL]+[I]のTABキーを使えば 1つのTABコードに変換されてバッファに格納されるので、 バッファを効率よく使うことができます。 この機能によって、 それほど多くのメモリを消費することなく ステートメントの各欄の頭を揃えることができます。 ただし、Sコマンドでスペースを含む文字列をサーチするときに、 バッファ内でTABコードに変換されているか否かを考慮する必要があります。